package com.sheng.leetcode.year2024.month08.day24;

import org.junit.Test;

import java.util.HashMap;
import java.util.Map;

/**
 * @author by ls
 * @date 2024/8/27
 * <p>
 * 3146. 两个字符串的排列差<p>
 * <p>
 * 给你两个字符串 s 和 t，每个字符串中的字符都不重复，且 t 是 s 的一个排列。<p>
 * 排列差 定义为 s 和 t 中每个字符在两个字符串中位置的绝对差值之和。<p>
 * 返回 s 和 t 之间的 排列差 。<p>
 * <p>
 * 示例 1：<p>
 * 输入：s = "abc", t = "bac"<p>
 * 输出：2<p>
 * 解释：<p>
 * 对于 s = "abc" 和 t = "bac"，排列差是：<p>
 * "a" 在 s 中的位置与在 t 中的位置之差的绝对值。<p>
 * "b" 在 s 中的位置与在 t 中的位置之差的绝对值。<p>
 * "c" 在 s 中的位置与在 t 中的位置之差的绝对值。<p>
 * 即，s 和 t 的排列差等于 |0 - 1| + |1 - 0| + |2 - 2| = 2。<p>
 * <p>
 * 示例 2：<p>
 * 输入：s = "abcde", t = "edbac"<p>
 * 输出：12<p>
 * 解释： s 和 t 的排列差等于 |0 - 3| + |1 - 2| + |2 - 4| + |3 - 1| + |4 - 0| = 12。<p>
 * <p>
 * 提示：<p>
 * 1 <= s.length <= 26<p>
 * 每个字符在 s 中最多出现一次。<p>
 * t 是 s 的一个排列。<p>
 * s 仅由小写英文字母组成。<p>
 */
public class LeetCode3146 {

    @Test
    public void test01() {
//        String s = "abc", t = "bac";
        String s = "abcde", t = "edbac";
        System.out.println(new Solution().findPermutationDifference(s, t));
    }
}

class Solution {
    public int findPermutationDifference(String s, String t) {
        int n = s.length();
        int ans = 0;
        Map<Character, Integer> sMap = new HashMap<>();
        for (int i = 0; i < n; i++) {
            sMap.put(s.charAt(i), i);
        }
        for (int i = 0; i < n; i++) {
            char c = t.charAt(i);
            ans += Math.abs(sMap.get(c) - i);
        }
        return ans;
    }
}
